/*
 * w25q16.h
 *  该模块用于对w25q16进行读写操作
 *  Created on: 2025.6.10
 *      Author: TracyHenry
 */
#ifndef __W25Q16_H
#define __W25Q16_H

#include "main.h"

// W25Q16命令集
#define W25X_WriteEnable		      0x06 
#define W25X_WriteDisable		      0x04 
#define W25X_ReadStatusReg1	    0x05 
#define W25X_ReadStatusReg2	    0x35 
#define W25X_WriteStatusReg1    0x01 
#define W25X_WriteStatusReg2    0x31 
#define W25X_ReadData			      0x03 
#define W25X_FastReadData		    0x0B 
#define W25X_PageProgram		      0x02 
#define W25X_BlockErase		        0xD8 
#define W25X_SectorErase		      0x20 
#define W25X_ChipErase		        0xC7 
#define W25X_PowerDown		        0xB9 
#define W25X_ReleasePowerDown   0xAB 
#define W25X_DeviceID				      0xAB 
#define W25X_ManufactDeviceID   0x90 

// W25Q16相关定义
// 容量为16Mbit，实际可用2^16 KB = 2MB
#define W25Q16_CAPACITY_ADDR    0x15   

void W25Q16_Init(void);
uint16_t W25Q16_ReadID(void);
void W25Q16_WriteEnable(void); 
void W25Q16_WriteDisable(void);
uint8_t W25Q16_ReadSR1(void);
uint8_t W25Q16_ReadSR2(void);
void W25Q16_WriteSR1(uint8_t sr1);
void W25Q16_WriteSR2(uint8_t sr2);
void W25Q16_WaitForWriteEnd(void);
void W25Q16_Read(uint8_t* pBuffer, uint32_t ReadAddr, uint16_t NumByteToRead);
void W25Q16_PageWrite(uint8_t* pBuffer, uint32_t WriteAddr, uint16_t NumByteToWrite);
void W25Q16_SectorErase(uint32_t DstAddr);
void W25Q16_ChipErase(void);

#endif  /* __W25Q16_H */
